/**
 * 请求拦截器封装
 */
import axios from "axios";
//引入加载动画
import { ElLoading,ElMessage } from 'element-plus'
let loadingInstance:any = null;

const instance = axios.create({
    baseURL: import.meta.env.VITE_API_URL,
    timeout: 3000
});

// 请求拦截器
instance.interceptors.request.use(
    (config: any) => {
        //是否显示加载动画
        if(config.loading) {
            loadingInstance = ElLoading.service({
                text: 'Loading',
                background: 'rgba(0, 0, 0, 0.5)'
            })
        }
        // 在这里可以根据业务需求设置请求header，包括token等
        return config;
    },
    (err) => {
        return Promise.reject(err);
    }
);

// 响应拦截器
instance.interceptors.response.use(
    (res) => {
        // 这里根据业务需求对响应进行处理，可以根据响应状态码进行不同的处理
        // 隐藏加载动画
        loadingInstance && loadingInstance.close()
        //状态码
        const code = res.data.code || 200;
        if(code === 200) {
            return res.data;
        }else {
            ElMessage({
                message: '请求出错！',
                type: 'error'
            })
            return Promise.reject('error')
        }
    },
    (err) => {
        // 隐藏加载动画
        loadingInstance && loadingInstance.close()
        let { message } = err
        if (message === 'Network Error') {
            message = '后端接口连接异常'
        } else if (message.includes('timeout')) {
            message = '系统接口请求超时'
        } else if (message.includes('Request failed with status code')) {
            message = `系统接口${message.substr(message.length - 3)}异常`
        }
        ElMessage.closeAll()
        ElMessage({
            message,
            type: 'error',
            duration: 5 * 1000
        })
        return Promise.reject(err);
    }
);

export default instance;